#include <rtthread.h>

#ifdef RT_USBH_HID_KEYBOARD

static const char* keymap[256] = {
    [0x04] = "a", [0x05] = "b", [0x06] = "c", [0x07] = "d", [0x08] = "e", [0x09] = "f",
    [0x0a] = "g", [0x0b] = "h", [0x0c] = "i", [0x0d] = "j", [0x0e] = "k", [0x0f] = "l",
    [0x10] = "m", [0x11] = "n", [0x12] = "o", [0x13] = "p", [0x14] = "q", [0x15] = "r",
    [0x16] = "s", [0x17] = "t", [0x18] = "u", [0x19] = "v", [0x1a] = "w", [0x1b] = "x",
    [0x1c] = "y", [0x1d] = "z", [0x1e] = "1", [0x1f] = "2", [0x20] = "3", [0x21] = "4",
    [0x22] = "5", [0x23] = "6", [0x24] = "7", [0x25] = "8", [0x26] = "9", [0x27] = "0",
    [0x28] = "ENTER", [0x29] = "ESC", [0x2a] = "BACKSPACE", [0x2b] = "TAB",
    [0x2c] = "SPACE", [0x2d] = "-", [0x2e] = "=", [0x2f] = "[", [0x30] = "]",
    [0x33] = ";", [0x34] = "'", [0x36] = ",", [0x37] = ".", [0x38] = "/",
    [0x39] = "CAPS", [0x3a] = "F1", [0x3b] = "F2", [0x3c] = "F3", [0x3d] = "F4",
    [0x3e] = "F5", [0x3f] = "F6", [0x40] = "F7", [0x41] = "F8", [0x42] = "F9",
    [0x43] = "F10", [0x44] = "F11", [0x45] = "F12", [0x4f] = "RIGHT", [0x50] = "LEFT",
    [0x51] = "DOWN", [0x52] = "UP"
};

void usb_kbd_data_callback(rt_uint8_t *data, rt_size_t len)
{
    rt_uint8_t modifier = data[0];
    rt_uint8_t key;
    
    for (int i = 2; i < len && i < 8; i++)
    {
        key = data[i];
        if (key != 0)
        {
            if (keymap[key])
            {
                rt_kprintf("[KB] %s%s\n", 
                          (modifier & 0x22) ? "SHIFT+" : "",
                          keymap[key]);
            }
            else
            {
                rt_kprintf("[KB] 0x%02x\n", key);
            }
        }
    }
}

#endif
